package com.oa.service;

import com.oa.back.ResponseBack;
import com.oa.common.base.Page;
import com.oa.common.base.Pageable;
import com.oa.entities.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface UserService extends UndeleteService<Long,User> {

    /**
     * 用户登录的接口
     * @param username
     * 用户名
     *
     * @param password
     * 密码
     *
     * @return
     */
    ResponseBack<String> login(HttpServletRequest request, HttpServletResponse response,String username, String password, String code);

    /**
     * 初始化的名称
     *
     */
    void init();

    /**
     * 根据用户名查询用户
     *
     * @param username
     * 用户名
     *
     * @return
     */
    User findByUsername(String username);

    /**
     *  根据用户的id查询权限
     *
     * @param id
     * 用户的id
     * @return
     */
    List<String> findById(Long id);

    /**
     * 根据关键字分页查询用户
     *
     * @param pageable
     * 分页查询类
     *
     * @param key
     * 关键字
     *
     * @return
     */
    Page<User> findByPage(Pageable pageable,String key);

    /**
     * 根据部门的id校验员工是否存在
     *
     * @param departmentId
     * 部门的id
     *
     * @return
     */
    Boolean validateByDepartment(Long departmentId);

    /**
     * 根据权限校验用户
     *
     * @param roleId
     * 权限的id
     * @return
     */
    Boolean validateByRole(Long roleId);

    /**
     * 提交员工的接口
     *
     * @param params
     * 参数
     *
     * @see com.oa.common.dto.UserDto
     * @return
     */
    ResponseBack<String> submit(String params);

    /**
     * 校验用户名是否存在
     *
     * @param username
     * 用户名
     *
     * @param id
     * 用户的id
     *
     * @return
     */
    Boolean validateUsername(String username,Long id);

    /**
     * 校验用户的电话
     *
     * @param phone
     * 手机号码
     *
     * @param id
     * 用户的id
     * @return
     */
    Boolean validatePhone(String phone,Long id);

    /**
     * 校验电子邮件是否存在
     *
     * @param email
     * 电子邮件
     *
     * @param id
     * 用户的id
     * @return
     */
    Boolean validateEmail(String email,Long id);

    /**
     * 设置员工离职的接口
     * @param id
     * 用户的id
     *
     * @return
     */
    ResponseBack<String> dimission(Long id);

    User getCurrent();
}
